﻿/**********************************************************************
 * @file   OperGraphPreprocess.h
 * @brief  前处理可视化事件操作器
 * @author ZhouZhaoYi (zhouzhaoyi@diso.cn)
 * @date   2025-05-22
 *********************************************************************/

#ifndef _OPERGRAPHPREPROCESS_H__
#define _OPERGRAPHPREPROCESS_H__

#include "OperGraphEvent3D.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"

namespace GUIOper
{
    /**
     * @brief  前处理可视化事件操作器
     * @author ZhouZhaoYi (zhouzhaoyi@diso.cn)
     * @date   2025-05-22
     */
    class OperGraphPreprocess : public OperGraphEvent3D
    {
        Q_OBJECT
    public:
        /**
         * @brief  构造函数
         * @author ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date   2025-05-22
         */
        explicit OperGraphPreprocess() = default;
        /**
         * @brief  析构函数
         * @author ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date   2025-05-22
         */
        ~OperGraphPreprocess() = default;
        /**
         * @brief  刷新渲染对象
         * @author ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date   2025-05-22
         */
        virtual void updateGraph(int dataObjId, bool forceUpdate = false) override;
        /**
         * @brief    更新全部可视化对象。（没有则创建）[虚函数]
         * @param[i] forceUpdate                针对已存在模型是否强制刷新
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-08-04
         */
        virtual void updateAll(bool forceUpdate = false) override;
        /**
         * @brief    更新整体颜色
         * @param[i] dataObjId                对象id
         * @param[i] color                    颜色
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-07-18
         */
        void updateAllColor(int dataObjId, QColor color) override;
        /**
         * @brief    更新全部模型可视化对象。（没有则创建）[虚函数]
         * @param[i] forceUpdate                针对已存在模型是否强制刷新
         * @return   void
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-08-04
         */
        virtual void updateAllModel(bool forceUpdate) override;
        /**
         * @brief    隐藏或显示模型。
         * @param    dataObjId：               数据对象ID
         * @param    visibility：              是否可见
         * @param    isFitView：               是否自适应
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-07-18
         */
        virtual void setModelVisible(int dataObjId, bool visibility, bool isFitView = true) override;
        /**
         * @brief    隐藏或显示点演员。
         * @param    visibility：              是否可见
         * @param    isPart：                  是否是Part
         * @param    isFitView：               是否自适应
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-15
         */
        virtual void setPointVisible(bool visibility,bool isPart = true, bool isFitView = true) override;
        /**
         * @brief    隐藏或显示线演员。
         * @param[i] visibility                 是否可见
         * @param[i] isPart                     是否是Part
         * @param    isFitView                  是否自适应
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-19
         */
        void setLineVisible(bool visibility, bool isPart = true, bool isFitView = true) override;
        /**
         * @brief    设置全部部件显示隐藏状态
         * @param[i] visibility                 是否可见
         * @param[i] isPart                     是否是Part
         * @param    isFitView                  是否自适应
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-17
         */
        virtual void setAllModelVisible(bool visibility, bool isPart = true, bool isFitView = true) override;
        /**
         * @brief    高亮对象
         * @param[i] dataObjId                  对象id
         * @param[i] color                      高亮颜色
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-08-21
         */
        virtual void hightObject(int dataObjId, QColor color = QColor(255,0,0)) override;
        /**
         * @brief    清除所有高亮接口
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-08-21
         */
        virtual void clearAllHight() override;
        /**
         * @brief    更新点大小
         * @param[i] dataObjId                对象id
         * @param[i] pointSize                点大小
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-15
         */
        virtual void updatePointSize(int dataObjId, int pointSize) override;
        /**
         * @brief    更新线宽
         * @param[i] dataObjId                对象id
         * @param[i] lineWidth                线宽
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-15
         */
        virtual void updateLineWidth(int dataObjId, int lineWidth) override;
        /**
         * @brief    更新透明度
         * @param[i] dataObjId                对象id
         * @param[i] opacity                  透明度
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-15
         */
        virtual void updateOpacity(int dataObjId, double opacity) override;
        /**
         * @brief    更新渲染模式
         * @param[i] dataObjId                对象id
         * @param[i] representation           显示表示
         * @author   ZhouZhaoYi (zhouzhaoyi@diso.cn)
         * @date     2025-09-15
         */
        virtual void updateRepresentation(int dataObjId, int representation) override;
    };
    Register2FITKOperatorRepo(GraphPreprocess, OperGraphPreprocess);
}  // namespace GUIOper
#endif

